package com.louzhu.gulimall.product.feign;

import com.louzhu.common.to.SkuReductionTo;
import com.louzhu.common.to.SpuBoundsTo;
import com.louzhu.common.utils.R;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;

/**
 * 远程调用优惠券服务接口
 */
// 声明这是一个远程调用接口,指定要调用哪个远程服务
@FeignClient("gulimall-coupon")
public interface CouponFeignService {

    /**
     * 指定调用远程接口
     * @param spuBoundsTo
     *
     * 远程调用时传输一个对象
     *  springcloud会在接收数据时将其转为JSON（请求参数使用@RequestBody注解声明）
     *  springcloud在注册中心找到远程服务，把转为JSON的数据放在请求体位置发送请求
     *  被调用的服务收到请求（请求体中有JSON数据），将请求体的json数据转换为被调用接口方法中的参数对象
     *  只要JSON数据模型是兼容的，双方服务请求参数的发送与接收对象无需是同一个TO对象类型
     *  （发送远程服务调用接口中的请求参数对象与被调用的远程服务接口方法接收参数的对象不需要时同一个对象，
     *  但是请求的参数对象必须使用@RequestBody注解标识，并且对象属性与接收参数的对象属性有对应关系，才能够成功转换）
     */
    // 声明要调用的远程服务的哪个接口
    @PostMapping("/coupon/spubounds/save")
    R saveSpuBounds(@RequestBody SpuBoundsTo spuBoundsTo);

    @PostMapping("/coupon/skufullreduction/saveInfo")
    R saveSkuReduction(@RequestBody SkuReductionTo skuReductionTo);
}
